<?php

	/**
	 * File : users.php
	 * Description : Fonctions d'authentification et de gestion des utilisateurs
	 * Date : 07.08.2012 12:59:58
	 * 
	 * This file is part of Phenix.  Phenix is free software: you can
	 * redistribute it and/or modify it under the terms of the GNU General Public
	 * License as published by the Free Software Foundation, version 2.
	 *
	 * This program is distributed in the hope that it will be useful, but WITHOUT
	 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
	 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
	 * details.
	 *
	 * You should have received a copy of the GNU General Public License along with
	 * this program; if not, write to the Free Software Foundation, Inc., 51
	 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
	 *
	 * Nils Schaetti <n.schaetti@gmail.com>
	**/

	/**************************************************
	 * Fonction de gestion utilisateur, login, session
	***************************************************/

	/**
	 * Crée une session utilisateur
	 *
	 * @param string $username Nom d'utilisateur
	 * @param string $password Mot de passe
	 */
	function ktkCreateSession($username,$password)
	{
		// UID
		$data = ktkGetUserByName($username);

		// Enregistre les paramètres de connexion
		$_SESSION['username'] = $username;
		$_SESSION['password'] = $password;

		// Enregistre la session sur le serveur
		ktkSaveSession($data['uid'],$_SERVER['REMOTE_ADDR']);
	}

	/**
	 * Vérifie sur toutes les pages que l'utilisateur est authentifié
	 *
	 * @param string $username Nom d'utilsiateur
	 * @param string $password Mot de passe
	 * @return boolean TRUE si ok, FALSE sinon
	 */
	function ktkCheckLogin()
	{
		global $session_time;
		
		// Pas de variable de session vide
		if(empty($_SESSION['username']) || 
			!array_key_exists('username',$_SESSION) || 
			empty($_SESSION['password']) || 
			!array_key_exists('password',$_SESSION))
		{
			ktkPrintDebug("Variables de session invalides");
			return(false);
		}

		// Vérifie que l'utilisateur et le mot de passe son valide
		if(ktkGetPassword($_SESSION['username']) != md5($_SESSION['password']))
		{
			ktkPrintDebug("Mauvais mot de passe");
			return(false);
		}
			
		// Vérifie qu'une session est bien ouverte
		if(!ktkSessionExists($_SESSION['username'],''))
		{
			ktkPrintDebug("Pas de session enregistrée");
			return(false);
		}
		
		// Vérifie que la session n'a pas expiré
		if((time()-ktkGetSessionModifiedTime($_SESSION['username'])) > $session_time)
		{
			ktkPrintDebug("Session expirée");
			return(false);
		}

		// Met à jour la date et l'heure de la session
		ktkUpdateSession($_SESSION['username']);
		
		return(true);
	}
			
	/**
	 * Authentifie un client
	 *
	 * @param string $username Nom d'utilisateur
	 * @param string $password Mot de passe
	 * @return boolean VRAI si ok, FAUX sinon
	 */
	function ktkLogin($username,$password)
	{
		global $ssh_server, $ssh_port;

		// Récupère les données de login
		if(!ktkUserExists($username))
		{
			ktkPrintDebug("L'utilisateur n'existe pas!");
			return(FALSE);
		}

		// Si mauvais mot de passe, alors échec
		if(ktkGetPassword($username) !== md5($password))
		{
			ktkPrintDebug("Mauvais mot de passe : ".ktkGetPassword($username)." vs ".md5($password));
			return(FALSE);
		}

		// Si connexion impossible au serveur SSH
		if(lp_ssh_connect($ssh_server,$username,$password,$ssh_port) < 0)
		{
			ktkPrintDebug("Connexion impossible au serveur SSH");
			return(FALSE);
		}
		
		// Informations sur l'utilisateur
		$user = ktkGetUserByName($username);
		
		// Supprime les anciennes sessions
		ktkDeleteSessions($use['uid']);

		// Crée la connexion temporaire
		ktkCreateSession($username,$password);
		
		// Met à jour les informations des logins
		ktkUpdateLoginInformation($username, time(), $_SERVER['REMOTE_ADDR']);

		// Login ok
		return(TRUE);
	}

?>
